package com.shujia.day15;

public class Code07ThreadLock {
    public static void main(String[] args) {
        /*
            使用两个线程 对一个变量进行求累加 看最终的累加结果
         */

        /*
            Java中锁的方式：
                synchronized
                    1、修饰代码块: 称为同步代码块 被修饰的代码块在执行过程中不会被其他线程打断形成一个原子性 要求给定的对象是在整个执行过程中全局唯一
                    2、修饰方法
                        修饰静态方法: 对当前方法定义的类进行做加锁操作，方法执行结束后，释放类的锁
                        修饰成员方法: 对于成员方法进行修饰后，那么当前对象执行过程中会被加锁，当方法执行结束后，那么会将锁进行释放 供其他的线程使用

         */


        CountThreadLock countThread = new CountThreadLock();

        Thread thread1 = new Thread(countThread, "1号");
        Thread thread2 = new Thread(countThread, "2号");


        thread1.start();
        thread2.start();



    }
}


class CountThreadLock implements Runnable {
    int countNum = 0;

//    Object object = new Object();


    @Override
    public void run() {

        for (int i = 0; i < 1000; i++) {
            synchronized (this) {
//                System.out.println(object.getClass().getName());
                try {
                    Thread.sleep(10);
                } catch (InterruptedException e) {
                    throw new RuntimeException(e);
                }
                countNum += 1;
                System.out.println(Thread.currentThread().getName() + "CountNum:" + countNum);
            }
        }

    }
}
